library("survival")
library("survminer")
## Loading required package: ggplot2
## Loading required package: ggpubr
## 
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
## 
##     myeloma
library("viridis")
## Loading required package: viridisLite
library("plotly")
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library("htmlwidgets")
library("GGally")
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
library("tidyverse")
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble  3.1.6     ✓ dplyr   1.0.8
## ✓ tidyr   1.2.0     ✓ stringr 1.4.0
## ✓ readr   2.1.2     ✓ forcats 0.5.1
## ✓ purrr   0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks plotly::filter(), stats::filter()
## x dplyr::lag()    masks stats::lag()
# Creating basic model:
surv1 <- survfit(Surv(time,status) ~ sex, data = lung)

# Getting data for plotly graph
p <- ggsurv(surv1, CI = T)
df <- data.frame(prob = p$data$surv, sex = p$data$group, 
                 upper = p$data$up, lower = p$data$low, time = p$data$time)
df$sex <- ifelse(df$sex == 1, "Male", "Female")
df$sex <- as.factor(df$sex)
df_wider <- df %>%
  pivot_wider(names_from = sex, values_from = prob)

df_wider$MaleUpper <- ifelse(!is.na(df_wider$Male), df_wider$upper, NA)
df_wider$MaleLower <- ifelse(!is.na(df_wider$Male), df_wider$lower, NA)
df_wider$FemaleUpper <- ifelse(!is.na(df_wider$Female), df_wider$upper, NA)
df_wider$FemaleLower <- ifelse(!is.na(df_wider$Female), df_wider$lower, NA)


# Plotly interactive graph:
p_i <- plot_ly() %>% 
  add_lines(x = df_wider$time, y = ~df_wider$MaleUpper, name = "Upper Bound", 
            line = list(width=2, dash="dot", color = '#481567FF'), showlegend = FALSE
            , hovertemplate = paste('%{y}')) %>%
  add_lines(x = df_wider$time, y = ~df_wider$Male, name = "Male", line = list(color = '#481567FF') 
            , hovertemplate = paste('%{y}')) %>%
  add_lines(x = df_wider$time, y = ~df_wider$MaleLower, name = "Lower Bound", 
            line = list(width=2, dash="dot", color = '#481567FF'), showlegend = FALSE
            , hovertemplate = paste('%{y}')) %>%
  
  add_lines(x = df_wider$time, y = ~df_wider$FemaleUpper, name = "Upper Bound", 
            line = list(width=2, dash="dot", color = '#DCE319FF'), showlegend = FALSE
            , hovertemplate = paste('%{y}')) %>%
  add_lines(x = df_wider$time, y = ~df_wider$Female, name = "Female", line = list(color = '#DCE319FF') 
            , hovertemplate = paste('%{y}')) %>%
  add_lines(x = df_wider$time, y = ~df_wider$FemaleLower, name = "Upper Bound", 
            line = list(width=2, dash="dot", color = '#DCE319FF'), showlegend = FALSE
            , hovertemplate = paste('%{y}')) %>%
  layout(hovermode = "x unified", 
         title = "Survival Curves of Men and Women With Lung Cancer",
         xaxis = list(title = "Time (in days)"),
         yaxis = list(title = "Survival Probability")) %>%
  rangeslider()

p_i